//二次封装axios,拦截器
import axios from 'axios'
import { ElMessage } from 'element-plus'
import config from '@/utils/config.js'

const service = axios.create({
  baseURL: config.baseApi,
})

// 添加请求拦截器
service.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  },
)

// 添加响应拦截器
service.interceptors.response.use(
  // 业务错误（code 非 200）在第一个回调中处理。
  (res) => {
    // 对响应数据做点什么
    const { code, data, msg } = res.data
    if (code === 200) {
      return data
    } else {
      // 超出 2xx 范围的状态码都会触发该函数。
      // 对响应错误做点什么
      ElMessage.error(msg || NETWORK_ERROR)
      return Promise.reject(msg || NETWORK_ERROR) // 抛出错误
    }
  },
  () => {}, // HTTP 错误（状态码非 200）和网络错误在第二个回调中处理。
)

function request(options) {
  options.method = options.method || 'get'
  //关于get请求参数的调整
  if (options.method && options.method.toLowerCase() === 'get') {
    options.params = options.data
  }
  //对mock开关做一个处理
  let isMock = config.isMock
  if (typeof options.isMock !== 'undefined') {
    isMock = options.isMock
  }
  //针对环境做一个处理
  if (config.env === 'prod') {
    //不能用mock
    service.defaults.baseURL = config.baseApi
  } else {
    service.defaults.baseURL = isMock ? config.mockApi : config.baseApi
  }
  return service(options)
}

export default request
const NETWORK_ERROR = '网络错误....'
